home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / newsgroups / misc.19990725-20000114 / 000441_news@columbia.edu _Tue Jan 11 17:24:31 2000.msg < prev    next >
Internet Message Format  |  2020-01-01  |  7KB

  1. Return-Path: <news@columbia.edu>
  2. Received: from newsmaster.cc.columbia.edu (newsmaster.cc.columbia.edu [128.59.59.30])
  3.     by watsun.cc.columbia.edu (8.8.5/8.8.5) with ESMTP id RAA03178
  4.     for <kermit.misc@watsun.cc.columbia.edu>; Tue, 11 Jan 2000 17:24:31 -0500 (EST)
  5. Received: (from news@localhost)
  6.     by newsmaster.cc.columbia.edu (8.8.5/8.8.5) id RAA16449
  7.     for kermit.misc@watsun.cc.columbia.edu; Tue, 11 Jan 2000 17:11:47 -0500 (EST)
  8. X-Authentication-Warning: newsmaster.cc.columbia.edu: news set sender to <news> using -f
  9. From: fdc@watsun.cc.columbia.edu (Frank da Cruz)
  10. Subject: Case Study #5: Directory Recursion
  11. Date: 11 Jan 2000 22:11:47 GMT
  12. Organization: Columbia University
  13. Message-ID: <85g9r3$g1v$1@newsmaster.cc.columbia.edu>
  14. To: kermit.misc@columbia.edu
  15.  
  16.  
  17. Today let's look at another new C-Kermit feature: directory recursion.
  18.  
  19. What's recursion?  "In order to understand recursion, first you must
  20. understand recursion."  (That's the joke that CS professors always use to
  21. introduce their lecture on recursion.)  As far as directories are concerned
  22. it's the familiar idea of thinking of some particular directory as the root
  23. of a tree, and then having a way to refer to (visit, list, send, ...) all
  24. the files in all the directories within the tree.  For example, as we do in
  25. DOS with "DIR /S", in Unix with "ls -R", or in VMS with "dir [...]".
  26.  
  27. Now C-Kermit can do this too.  To see directory recursion in action, start
  28. C-Kermit 7.0, CD to a directory that has some subdirectories (which in turn
  29. might have their own subdirectories, etc), and give it the following command:
  30.  
  31.   directory /recursive
  32.  
  33. This, by the way, illustrates not only directory recursion, but also
  34. C-Kermit's new built-in DIRECTORY command, and the idea of "switches", or
  35. command modifiers.  In this case "/recursive" is a switch.  The DIRECTORY
  36. command has lots of other switches too; type "dir ?" to see what they are,
  37. and "help dir" for a short description.  As with any C-Kermit command, you
  38. can abbreviate keywords (and switches are a kind of keyword) to any length
  39. that distinguishes them from any other keyword that can appear in the same
  40. position (and you can always get a list with "?"); for example:
  41.  
  42.   C-Kermit>dir /r? File specification;
  43.    or switch, one of the following:
  44.    /recursive  /reverse
  45.   C-Kermit>dir /rec
  46.  
  47. Try "dir /rec" from different directories to see how it works.  The key idea
  48. of recursion is that it repeats itself indefinitely until it runs out of
  49. things to do; in this case, until it runs out of subdirectories to visit.
  50.  
  51. The most important application for directory recursion in Kermit is file
  52. transfer.  C-Kermit's three main file-transfer commands -- SEND, GET, and
  53. RECEIVE -- each now include a /RECURSIVE option (switch), among many others.
  54. When you include it, you can send or receive entire directory trees, rather
  55. than just one or more files from a single directory.
  56.  
  57. Some of you might be wondering: "What's the big deal?  I could already do
  58. that by making a Tar or Zip or Backup (etc) archive and transferring it."
  59. True, but in general this only works between compatible platforms, and
  60. Kermit always likes to handle the general case and promote and embrace
  61. diversity :-)
  62.  
  63. When moving text files between different platforms, it is usually necessary
  64. to convert their record format and/or character set.  Zip (but not Tar or
  65. Backup) can take care of record-format conversion if you tell it to, but
  66. there is usually no good way to mix text-files-to-be-converted and
  67. binary-files-NOT-to-be converted within an archive.  No known archiving or
  68. file-transfer method besides Kermit handles character-set conversion, but
  69. this is important to anybody who writes in any language besides English (or
  70. Dutch or Latin) and needs to move files between platforms that use different
  71. character sets, such as Windows and Unix.
  72.  
  73. In yesterday's posting we saw how C-Kermit can go through a group of files
  74. and automatically switch between text and binary mode for each file.  You
  75. can test this feature without transferring any files with the command:
  76.  
  77.   directory /xfermode [ filespec ]
  78.  
  79. This adds a notation "(T)" or "(B)" to each file whose name matches a Text
  80. or Binary pattern, and therefore will be sent in the corresponding mode; the
  81. rest are sent in the prevailing mode, which is binary unless you changed it.
  82. Now when you give a SEND /RECURSIVE command, C-Kermit sends each file,
  83. switching between text and binary mode automatically.  When it encounters a
  84. directory, it enters the directory and sends files from it; when sending
  85. files from a lower directory, the pathname (relative to the original
  86. directory) is included in the name that is sent to the other Kermit; the
  87. process repeats for all directories in the tree.  The other Kermit uses the
  88. path information to replicate the original directory tree.  This works if
  89. each of the two Kermits is C-Kermit 7.0, Kermit 95 1.1.17 or later, or
  90. MS-DOS Kermit 3.16 (currently in Beta test), and it works between any
  91. combination of Unix, DOS, Windows, OS/2, or VMS.  File dates are preserved
  92. and, except in DOS-like file systems, so are file permissions (within
  93. reason).  I think this is a first.
  94.  
  95. By the way, just because you include the /RECURSIVE switch on a
  96. file-transfer command doesn't mean Kermit has to transfer ALL the files in
  97. the directory tree.  Of course you can give a filename or wildcard (or
  98. list of them) to select certain files, and there are also lots of new
  99. file-selection criteria available on each end; files can be selected by
  100. date, size, etc, and checked against exception lists.  For a quick idea
  101. of what's possible, here's a list of the new SEND switches:
  102.  
  103.  C-Kermit>send ? Filename, or switch, one of the following:
  104.   /after:         /except:        /nodotfiles     /recursive
  105.   /array:         /filter:        /not-after:     /rename-to:
  106.   /as-name:       /filenames:     /not-before:    /smaller-than:
  107.   /before:        /larger-than:   /pathnames:     /starting-at:
  108.   /binary         /listfile:      /print:         /subject:
  109.   /command        /mail:          /protocol:      /text
  110.   /delete         /move-to:       /quiet
  111.   /dotfiles       /nobackup       /recover
  112.  C-Kermit>
  113.  
  114. You can combine all this with the SET FILE COLLISION feature at the receiver
  115. to achieve all sorts of effects.  Perhaps the most useful in this regard is
  116. SET FILE COLLISION UPDATE.  This lets you run the same transfer periodically
  117. (say, every day, week, hour, whatever) and transfer only those files in an
  118. entire directory tree that changed since last time; thus synchronizing two
  119. directory trees, even if they are on incompatible file systems, even if they
  120. contain a mixture of text and binary files, even if the text character sets
  121. are different.
  122.  
  123. Well, this was a bit long, but even so it only scratches the surface.
  124. For more on this topic, see:
  125.  
  126.   ckermit2.txt Section 1.5 on command switches
  127.   ckermit2.txt Section 4.5.1 on the new DIRECTORY command
  128.   ckermit2.txt Section 4.7 on file-transfer command switches
  129.   ckermit2.txt Section 4.9 on the new wildcard syntax
  130.   ckermit2.txt Section 4.11 on directory tree transfer
  131.  
  132. - Frank